Cependant, il peut arriver que vous souhaitiez exécuter en super-utilisateur un logiciel qui fonctionne normalement sans.
Lancer des applications graphiques (c'est-à-dire ayant une fenêtre) en tant que super-utilisateur n'est pas une bonne pratique : il est toujours préférable de rechercher comment atteindre le même but via un utilitaire en ligne de commande. Si toutefois vous n'avez pas d'alternative, notez que l'usage du sudo utilisé pour les lignes de commande n'est pas approprié dans ce cas : il y a entre autres un risque d'écrasement de vos configurations.
Il est donc préférable d'utiliser un utilitaire approprié à votre environnement. Ces utilitaires ne sont pas installés par défaut, il faut les ajouter. Les plus répandus sont gksudo1) pour Ubuntu, Xubuntu, Ubuntu MATE, Ubuntu Budgie ou Lubuntu ; ou bien kdesudo2) pour Kubuntu ou l'environnement LXQt.
Par exemple, pour modifier un fichier avec gedit sur Ubuntu :
gksudo gedit nom_du_fichier
Si vous n'avez pas entré un mot de passe erroné, votre programme se charge en mode privilégié. En cas d'erreur dans votre mot de passe, recommencez les opérations ci-dessus.
Lors du succès de l'authentification, les tâches administratives sont débloquées pour une durée de 15 minutes :
votre mot de passe ne vous sera pas demandé dans les 15 minutes suivantes pour effectuer d'autres tâches administratives.
Si vous n'avez pas entré un mot de passe erroné, votre programme se charge en mode privilégié. En cas d'erreur dans votre mot de passe, recommencez les opérations ci-dessus. Lors du succès de l'authentification, les tâches administratives sont débloquées pour une durée de 15 minutes : votre mot de passe ne vous sera pas demandé dans les 15 minutes suivantes pour effectuer d'autres tâches administratives.
Dans un terminal, saisissez la commande suivante :
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY "nom du programme"
Si vous n'avez pas entré un mot de passe erroné, votre commande s'exécute immédiatement en mode privilégié. En cas d'erreur dans votre mot de passe, recommencez les opérations ci-dessus. Lors du succès de l'authentification, les tâches administratives sont débloquées pour une durée de 15 minutes : votre mot de passe ne vous sera pas demandé dans les 15 minutes suivantes pour effectuer d'autres tâches administratives.
La règle est simple :
sudo <commande> pour exécuter de nombreux programmes en mode graphique avec des privilèges d'administration. gksudo ou kdesudo. sudo pour exécuter des applications en mode graphique peut causer des problèmes dans votre session utilisateur courante, vous empêchant de poursuivre votre travail.3)
Seuls les administrateurs sont habilités à effectuer des tâches administratives à travers l'utilitaire sudo. Pour augmenter les privilèges d'un compte d'utilisateur, vous devez vous-même être d'abord un administrateur.
Pour assigner le rôle d'administrateur à un autre compte d'utilisateur:
sudo adduser <identifiant> sudo
où <identifiant> doit être remplacé par l'identifiant du compte d'utilisateur (sans les <chevrons>) auquel des privilèges supplémentaires doivent être accordés.
Notez que les changements de privilèges ne sont pas appliqués dès leur enregistrement. Ils ne sont appliqués que lorsque toutes les sessions en cours sont closes pour ce compte-là. À l'ouverture de session suivante pour ce compte, les nouveaux privilèges sont pris en compte.
Rapportez-vous à la section "Ajout ou retrait de privilèges à un compte d'utilisateur ou un groupe d'utilisateurs" pour configurer plus finement les privilèges accordés par l'utilitaire sudo.
sudo peut être paramétré finement pour autoriser ou refuser l'exécution de tâches privilégiées. Plus que simplement autoriser l'exécution de toutes les tâches administratives à un groupe d'utilisateurs par l'authentification par mot de passe, sudo peut être paramétré pour permettre à un utilisateur particulier ou un groupe d'utilisateurs particulier d'exécuter une ou des tâches bien précises, avec ou sans saisie du mot de passe. D'autres paramètres, tels le délai d'attente avant qu'une ré-authentification soit nécessaire, l'endroit où est enregistré le journal d’événements et le niveau de courtoisie de sudo, sont aussi paramétrables.
Les avantages de l'emploi de sudo, par opposition à l'emploi direct d'un unique compte super-utilisateur (root), sont nombreux pour une utilisation dans un environnement domestique ou de PME/PMI :
root par des mauvaises habitudes ;sudo conserve une trace de toutes les commandes exécutées. Si un problème apparaît, vous pourrez toujours consulter ce journal afin de retrouver la commande ayant causé le problème ;root et essaieront de pirater celui-ci d'abord. Ils ne connaissent pas les identifiants des autres utilisateurs de votre ordinateur ;root ;sudo peut être configuré avec une politique bien plus affinée.
Le modèle de sécurité à la base est le même, et les deux modèles partagent une même faiblesse. Tout utilisateur utilisant su root ou sudo pour effectuer des tâches administratives doit être considéré comme un utilisateur privilégié.
Si le compte de l'utilisateur est compromis par un attaquant, celui-ci peut aussi obtenir une élévation de privilèges et compromettre le système d'exploitation.
Les utilisateurs ayant les droits d'administration doivent être protégés avec les mêmes soins que le compte super-utilisateur.
Sur une note plus ésotérique, on remarque que sudo encourage la modification des habitudes de travail, qui peuvent provoquer un impact positif sur la sécurité du système d'exploitation.
sudo est habituellement utilisé pour exécuter une commande unique, alors que su root est souvent utilisé pour exécuter un terminal root et exécuter des multiples commandes.
L'approche de sudo réduit la possibilité qu'un terminal root soit laissé ouvert indéfiniment sur le poste de travail et encourage l'utilisateur à minimiser son utilisation des privilèges d'administration.
L'ensemble des actions exécutées à travers l'utilitaire sudo – qu'elles s'accomplissent avec succès ou échec – sont journalisées. Elles sont inscrites dans le fichier de journal /var/log/auth.log.
Utiliser sudo pour exécuter une seule commande ne cause pas un réel désagrément, mais il peut être désagréable de l'utiliser pour exécuter une longue procédure nécessitant plusieurs interventions en mode super-utilisateur (root).
L'ouverture d'un terminal en mode root permet d'éviter d'avoir à appeler sudo à chacune des étapes de cette procédure, sans avoir à activer l'accès au compte d'utilisateur root.
L'inconvénient de cette méthode est qu'aucune trace des actions posées n'est inscrite dans le journal de sudo (sinon l'ouverture du terminal root lui-même). Il est déconseillé d'ouvrir un terminal root.
Pour vous servir d'un terminal root :
utilisateur@ordinateur:~$ sudo -i
root : root@ordinateur:~# exit
ou Ctrl+D
sudo pose a priori des problèmes pour la redirection de flux dans une console. Par exemple, la redirection suivante ne fonctionnera pas :
utilisateur@ordinateur:~$ sudo echo 2 > /proc/acpi/thermal_zone/ATF0/polling_frequency
La raison de cet échec est que sudo n'exécute que la première tâche (echo 2) avec l'identité empruntée ; la redirection, elle, est effectuée en mode utilisateur uniquement.
La solution, pour contourner cette limitation, est d'appeler un nouvel interpréteur de commandes et de lui faire exécuter votre redirection de flux. Par exemple :
utilisateur@ordinateur:~$ sudo sh -c 'echo 2 > /proc/acpi/thermal_zone/ATF0/polling_frequency'
De cette manière, c'est tout l'interpréteur sh et la commande passée en argument qui est exécutée avec l'identité empruntée.
Certains programmes ou services nécessitent des comptes super-utilisateurs. C'est généralement le cas avec des systèmes de bases de données (comme MySQL). Prenez note que ce compte super-utilisateur est indépendant de celui du système d'exploitation : il est unique au programme ou service en particulier. Si un tel programme ou service nécessite un compte super-utilisateur, vous devez paramétrer ce compte avec les outils qu'il fournit. À ce sujet, rapportez-vous aux documents d'aide relatifs à chacune de vos applications concernées.
/etc/passwd pour l'utilisateur cible (root par défaut)./etc/passwd pour l'utilisateur cible (root par défaut). Cela signifie que des fichiers spécifiques tels que .login ou .profile seront lus par le shell ainsi lancé. Voici une commande mettant en évidence ces différences (il est nécessaire que le paquet meld soit installé pour que cette commande fonctionne):
sudo -s env > /tmp/testenv_sudo_-s ; sudo -i env > /tmp/testenv_sudo_-i ; sudo su -c env > /tmp/testenv_sudo_su ; meld /tmp/testenv_sudo_* && rm /tmp/testenv_sudo_*
Les principales différences observées, dans le cas où ces commandes sont lancées par l'utilisateur nommé foo :
| sudo -s | sudo -i | sudo su | |
|---|---|---|---|
| HOME= | /home/foo | /root | /root |
| PWD= | /home/foo | /root | /home/foo |
| PATH= | /usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin | /usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/games | /usr/local/sbin:/usr/local/bin: /usr/sbin:/usr/bin:/sbin:/bin:/usr/games |
| fichier(s) exécuté(s) | /home/foo/.bashrc | /etc/environment, /root/.login, /root/.profile, /root/.bashrc | /etc/environment, /root/.bashrc |
On voit donc que ces commandes ont une influence différente sur les variables d'environnement, et cela peut avoir des conséquences inattendues (compilations, exécution de scripts, etc.).
Utiliser sudo pour exécuter une seule commande ne cause pas un réel désagrément, mais il peut être désagréable de l'utiliser pour exécuter une longue procédure nécessitant plusieurs interventions en mode super-utilisateur (root).
L'ouverture d'un terminal en mode root permet d'éviter d'avoir à appeler sudo à chacune des étapes de cette procédure, sans avoir à activer l'accès au compte d'utilisateur root.
sudo (sinon l'ouverture du terminal root lui-même). Il est déconseillé d'ouvrir un terminal root.
Pour vous servir d'un terminal root :
utilisateur@ordinateur:~$ sudo -i
root : root@ordinateur:~# exit
ou "Ctrl d"
Si le besoin d'un login en tant que root se fait ressentir, la meilleure alternative est de le simuler avec la commande suivante :
sudo -i
Il est possible de sortir de ce shell avec le raccourci "Ctrl d" ou avec la commande suivante :
exit
À vos risques et périls, donc : pour activer le compte root (c'est-à-dire lui donner un mot de passe), on peut utiliser la commande suivante:
sudo passwd root
Si vous pensez avoir besoin d'un compte root activé pour réaliser une certaine action, consultez un canal de support officiel (irc, liste de diffusion, forum, …) avant de l'activer, afin de vous assurez qu'il n'y a pas une meilleure méthode pour réaliser cette action.
Pour désactiver un compte root précédemment activé:
sudo usermod -p '!' root
gksudo paramètre le dossier personnel (la variable d'environnement $HOME) pour l'application exécutée en mode privilégiée à /root plutôt qu'à /home/<identifiant> et copie le fichier .Xauthority dans un dossier temporaire.